package com.example.sb.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.ApiController;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.sb.config.OperationLogAnnotation;
import com.example.sb.config.ResultCode;
import com.example.sb.entity.User;
import com.example.sb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * (User)表控制层
 *
 * @author junjin.zhao
 * @since 2021-12-12 08:58:37
 */
@RestController
@RequestMapping("user")
public class UserController extends ApiController {
  public Integer count = 0;
  List<Integer> countList = new ArrayList<>();

  /** 服务对象 */
  @Resource private UserService userService;

  @RequestMapping("/getCountSyn")
  public synchronized void getCountSyn(HttpServletRequest request) {
    count++;
    List<Integer> newList = countList.stream()
            .map(e -> { // 获取deptCode或deptAlias的Stream
               return false ? e : e;
            }).collect(Collectors.toMap(e -> e, e -> 1, Integer::sum)) // 获得元素出现频率的 Map，键为元素，值为元素出现的次数
            .entrySet().stream() // 所有 entry 对应的 Stream
            .filter(entry -> entry.getValue() > 1) // 过滤出元素出现次数大于 1 的 entry
            .map(Map.Entry::getKey) // 获得 entry 的键（重复元素）对应的 Stream
            .collect(Collectors.toList()); // 转化为 ListcountList.add(count);
    System.out.println("重复的值有:"+newList.toString());
    countList.add(count);
    System.out.println("同步原数量大小:"+countList.size()+",去重数量:"+countList.stream().distinct().count()+",内容："+countList.toString());
  }
  @RequestMapping("/getCount")
  public void getCount(HttpServletRequest request) {
    count++;
    List<Integer> newList = countList.stream() //
            .map(e -> { // 获取deptCode或deptAlias的Stream
              return false ? e : e;
            }).collect(Collectors.toMap(e -> e, e -> 1, Integer::sum)) // 获得元素出现频率的 Map，键为元素，值为元素出现的次数
            .entrySet().stream() // 所有 entry 对应的 Stream
            .filter(entry -> entry.getValue() > 1) // 过滤出元素出现次数大于 1 的 entry
            .map(Map.Entry::getKey) // 获得 entry 的键（重复元素）对应的 Stream
            .collect(Collectors.toList()); // 转化为 ListcountList.add(count);
    System.out.println("重复的值有:"+newList.toString());
    countList.add(count);
    System.out.println("原数量大小:"+countList.size()+",去重数量:"+countList.stream().distinct().count()+",内容："+countList.toString());
  }

  /**
   * 分页查询所有数据
   *
   * @param page 分页对象
   * @param user 查询实体
   * @return 所有数据
   */
  @GetMapping
  @OperationLogAnnotation(operModul = "用户模块-用户列表", operType = "查询", operDesc = "查询所有用户")
  public R selectAll(Page<User> page, User user) {
    return success(this.userService.page(page, new QueryWrapper<>(user)));
  }

  /**
   * 通过主键查询单条数据
   *
   * @param id 主键
   * @return 单条数据
   */
  @GetMapping("{id}")
  @OperationLogAnnotation(operModul = "用户模块-用户列表", operType = "查询", operDesc = "查询单个用户")
  public Object selectOne(@PathVariable Serializable id) {
    return this.userService.getById(id);
  }

  /**
   * 新增数据
   *
   * @param user 实体对象
   * @return 新增结果
   */
  @PostMapping
  public R insert(@RequestBody User user) {
    return success(this.userService.save(user));
  }
  @RequestMapping("/insertBatch")
  public int insertBatch() {
    return userService.insertBatch();
  }
  /**
   * 修改数据
   *
   * @param user 实体对象
   * @return 修改结果
   */
  @PutMapping
  public R update(@RequestBody User user) {
    return success(this.userService.updateById(user));
  }

  /**
   * 删除数据
   *
   * @param idList 主键结合
   * @return 删除结果
   */
  @DeleteMapping
  public R delete(@RequestParam("idList") List<Long> idList) {
    return success(this.userService.removeByIds(idList));
  }
}
